GtkPopover: Protect against transparent backgrounds
authorTimm Bäder <mail@baedert.org>
Tue, 5 Jan 2016 18:05:43 +0000 (19:05 +0100)
committerTimm Bäder <mail@baedert.org>
Fri, 8 Jan 2016 08:14:03 +0000 (09:14 +0100)
If the background is transparent, we can't use it for the input shape,
since that will be empty. Draw a box with rounded corners irectly
instead, in fully opaque black.

https://bugzilla.gnome.org/show_bug.cgi?id=759905

gtk/gtkpopover.c

index 53f004e5f28d31cd64733810d0a8f3b4d16b0ca2..d14fcfd2e8c5185094068666e7e38d14a181da84 100644 (file)
 #include "gtksizegroup.h"
 #include "a11y/gtkpopoveraccessible.h"
 #include "gtkmenusectionbox.h"
+#include "gtkroundedboxprivate.h"
+#include "gtkstylecontextprivate.h"
 
 #ifdef GDK_WINDOWING_WAYLAND
 #include "wayland/gdkwayland.h"
@@ -882,17 +884,25 @@ gtk_popover_fill_border_path (GtkPopover *popover,
   GtkAllocation allocation;
   GtkStyleContext *context;
   gint x1, y1, x2, y2;
+  GtkRoundedBox box;
 
   context = gtk_widget_get_style_context (widget);
   gtk_widget_get_allocation (widget, &allocation);
 
+  cairo_set_source_rgba (cr, 0, 0, 0, 1);
+
   gtk_popover_apply_tail_path (popover, cr);
   cairo_close_path (cr);
   cairo_fill (cr);
 
   gtk_popover_get_rect_coords (popover, &x1, &y1, &x2, &y2);
-  gtk_render_frame (context, cr, x1, y1, x2 - x1, y2 - y1);
-  gtk_render_background (context, cr, x1, y1, x2 - x1, y2 - y1);
+
+  _gtk_rounded_box_init_rect (&box, x1, y1, x2 - x1, y2 - y1);
+  _gtk_rounded_box_apply_border_radius_for_style (&box,
+                                                  gtk_style_context_lookup_style (context),
+                                                  0);
+  _gtk_rounded_box_path (&box, cr);
+  cairo_fill (cr);
 }
 
 static void